"""
# 机器学习之描述统计
    1、Supported方法
        count       --》 求总数
        max         --》 最大值
        min         --》 最小值
        mean        --》 平均值
        variance    --》 分布规律
        ....
    2、Supported数据的类型
        Dense
        Sparse
        Labeled Point
    3、box plot（上下有线，中间有个长方形的的框框，）


"""
from __future__ import print_function, division
from pyspark import SparkConf, SparkContext
from pyspark.sql import SparkSession
import numpy as np
# 要注意LabelPoint和Vector 来自不同的物件
from pyspark.mllib.linalg import Vectors
from pyspark.mllib.stat import Statistics

spark = SparkSession.builder.master("local").appName("test").getOrCreate()
sc = spark.sparkContext

# 读取数据
data = spark.read.csv("E:\\Python\\pyspark_demo01\\pyspark_data\\ratings.csv", header=True)
sample_data = data.sample(False, 0.9, 1)
# 将文件度出来的数据转换成dense数据
dense_data = sample_data.rdd.map(lambda x: Vectors.dense(x))
# pysparkAPI：http://spark.apache.org/docs/latest/api/python/pyspark.mllib.html#module-pyspark.mllib.stat
summary = Statistics.colStats(dense_data)
print("Duration Sttatistics:")
print("平均值：{}".format(summary.mean()[2]))
print("ST.deviation：{}".format(round(np.sqrt(summary.variance()[2]), 3)))
print("最大值：{}".format(round(summary.max()[2], 3)))
print("最小值：{}".format(round(summary.min()[2], 3)))
print("Total value count：{}".format(summary.count()))
print("Number of non-zero values：{}".format(summary.numNonzeros()[2]))
"""
# 执行结果
Duration Sttatistics:
平均值：3.75
ST.deviation：0.866
最大值：5.0
最小值：3.0
Total value count：4
Number of non-zero values：4.0
"""

import pandas as pd
import seaborn as sns

# 将数据转换为pandas  时 表的属性会变为object
sample_data_pd = sample_data.toPandas()
# 将数据转换为图表
sample_data_pd.head()
# 将dataFrame装换为可以计算的值
aa = sns.boxenplot(x=sample_data_pd['rating'].convert_objects(convert_numeric=True))
print(aa)
sns.distplot(sample_data_pd['rating'].convert_objects(convert_numeric=True))

means = []
for i in range(20):
    mean = sample_data_pd['rating'].sample(frac=0.9).convert_objects(convert_numeric=True).mean(axis=0)
    means.append(mean)
# means[:9]
bb = sns.distplot(means)
print(bb)

import matplotlib.pyplot as plt

plt.boxplot((0, 1, 5, 4, 8, 89, 85, 45, 45, 5, 4, 4, 5, 5, 4))
plt.show()
